//获取接口数据
import {reqSendCode,reqUserRegister,reqUserLogin,reqUserInfoList,reqLogout} from "@/api"
import { setToken,getToken,removeToken} from "@/utils/token";
//准备actions 用于响应组件中的动作
const actions={
  //获取验证码
  async getSendCode({commit},phone){
        let result= await reqSendCode(phone);
        if(result.code==200){
          commit('GETSENDCODE',result.data)
          return 'ok'
        }else{
          return Promise.reject(new Error('失败'))
        }
   },
   //用户注册
   async userRegister({commit},user){
      let result= await reqUserRegister(user);
      console.log(result);
      if(result.code==200){
        return 'ok'
      }else{
        return Promise.reject(new Error('用户重复，请重新输入！'))
      }
   },
   //用户登录
   async userLogin({commit},user){
    let result= await reqUserLogin(user);
    console.log(result);
    if(result.code==200){
      commit("USERLOGIN",result.data.token);
      //持久化存储token
      setToken(result.data.token);
      return 'ok'
    }else{
      return Promise.reject(new Error('登录失败'))
    }
 },
  //获取用户信息
  async getUserInfoList({commit}){
      let result= await reqUserInfoList();
      if(result.code==200){
        commit("GETUSERINFOLIST",result.data);
        return 'ok'
      }else{
        return Promise.reject(new Error('失败'))
      }
      
  },
  //退出登录
  async userLogout({commit}){
    //向服务器发起请求，通知服务器清楚token
    let result= await reqLogout();
    if(result.code==200){
      commit('CLEAR')
      return 'ok'
    }else{
      return Promise.reject(new Error('失败'))
    }
  }
}
//准备mutations 用于操作数据（state）
const mutations={
  GETSENDCODE(state,value){
    state.sendCode=value;
  },
  USERLOGIN(state,value){
    state.token=value
  },
  GETUSERINFOLIST(state,userInfo){
    state.userInfo=userInfo
  },
  //清除本地数据
  CLEAR(state){
    state.token = '';
    state.userInfo={};
    removeToken();
  }
}
//准备state 用于存储数据
const state={
  sendCode:'',
  token:getToken(),
  userInfo:{}
}
//准备getters 用于将state中的数据进行加工
//可以把我们将来在组件当中需要用的数据简化一下【将来组件获取数据就简单了】
const getters={
}

export default{
    actions,
    mutations,
    state,
    getters
}